!
{% if ldp is vyos_defined %}
mpls ldp
{%     if ldp.router_id is vyos_defined %}
 router-id {{ ldp.router_id }}
{%     endif %}
{%     if ldp.parameters.cisco_interop_tlv is vyos_defined %}
 dual-stack cisco-interop
{%     endif %}
{%     if ldp.parameters.transport_prefer_ipv4 is vyos_defined %}
 dual-stack transport-connection prefer ipv4
{%     endif %}
{%     if ldp.parameters.ordered_control is vyos_defined %}
 ordered-control
{%     endif %}
{%     if ldp.neighbor is vyos_defined %}
{%         for neighbor, neighbor_config in ldp.neighbor.items() %}
{%             if neighbor_config.password is vyos_defined %}
 neighbor {{ neighbor }} password {{ neighbor_config.password }}
{%             endif %}
{%             if neighbor_config.ttl_security is vyos_defined %}
{%                 if neighbor_config.ttl_security.disable is vyos_defined %}
 neighbor {{ neighbor }} ttl-security disable
{%                 else %}
 neighbor {{ neighbor }} ttl-security hops {{ neighbor_config.ttl_security }}
{%                 endif %}
{%             endif %}
{%             if neighbor_config.session_holdtime is vyos_defined %}
 neighbor {{ neighbor }} session holdtime {{ neighbor_config.session_holdtime }}
{%             endif %}
{%         endfor %}
{%     endif %}
 !
{%     if ldp.discovery.transport_ipv4_address is vyos_defined %}
 address-family ipv4
{%         if ldp.allocation.ipv4.access_list is vyos_defined %}
  label local allocate for {{ ldp.allocation.ipv4.access_list }}
{%         else %}
  label local allocate host-routes
{%         endif %}
{%         if ldp.discovery.transport_ipv4_address is vyos_defined %}
  discovery transport-address {{ ldp.discovery.transport_ipv4_address }}
{%         endif %}
{%         if ldp.discovery.hello_ipv4_holdtime is vyos_defined %}
  discovery hello holdtime {{ ldp.discovery.hello_ipv4_holdtime }}
{%         endif %}
{%         if ldp.discovery.hello_ipv4_interval is vyos_defined %}
  discovery hello interval {{ ldp.discovery.hello_ipv4_interval }}
{%         endif %}
{%         if ldp.discovery.session_ipv4_holdtime is vyos_defined %}
  session holdtime {{ ldp.discovery.session_ipv4_holdtime }}
{%         endif %}
{%         if ldp.import.ipv4.import_filter.filter_access_list is vyos_defined %}
{%             if ldp.import.ipv4.import_filter.neighbor_access_list is vyos_defined %}
  label remote accept for {{ ldp.import.ipv4.import_filter.filter_access_list }} from {{ ldp.import.ipv4.import_filter.neighbor_access_list }}
{%             else %}
  label remote accept for {{ ldp.import.ipv4.import_filter.filter_access_list }}
{%             endif %}
{%         endif %}
{%         if ldp.export.ipv4.explicit_null is vyos_defined %}
  label local advertise explicit-null
{%         endif %}
{%         if ldp.export.ipv4.export_filter.filter_access_list is vyos_defined %}
{%             if ldp.export.ipv4.export_filter.neighbor_access_list is vyos_defined %}
  label local advertise for {{ ldp.export.ipv4.export_filter.filter_access_list }} to {{ ldp.export.ipv4.export_filter.neighbor_access_list }}
{%             else %}
  label local advertise for {{ ldp.export.ipv4.export_filter.filter_access_list }}
{%             endif %}
{%         endif %}
{%         if ldp.targeted_neighbor is vyos_defined %}
{%             if ldp.targeted_neighbor.ipv4.enable is vyos_defined %}
  discovery targeted-hello accept
{%             endif %}
{%             if ldp.targeted_neighbor.ipv4.hello_holdtime is vyos_defined %}
  discovery targeted-hello holdtime {{ ldp.targeted_neighbor.ipv4.hello_holdtime }}
{%             endif %}
{%             if ldp.targeted_neighbor.ipv4.hello_interval is vyos_defined %}
  discovery targeted-hello interval {{ ldp.targeted_neighbor.ipv4.hello_interval }}
{%             endif %}
{%             for addresses in ldp.targeted_neighbor.ipv4.address %}
  neighbor {{ addresses }} targeted
{%             endfor %}
{%         endif %}
{%         if ldp.interface is vyos_defined %}
{%             for interface in ldp.interface %}
  interface {{ interface }}
  exit
{%             endfor %}
{%         endif %}
 exit-address-family
{%     else %}
 no address-family ipv4
{%     endif %}
 !
{%     if ldp.discovery.transport_ipv6_address is vyos_defined %}
 address-family ipv6
{%         if ldp.allocation.ipv6.access_list6 is vyos_defined %}
  label local allocate for {{ ldp.allocation.ipv6.access_list6 }}
{%         else %}
  label local allocate host-routes
{%         endif %}
{%         if ldp.discovery.transport_ipv6_address is vyos_defined %}
  discovery transport-address {{ ldp.discovery.transport_ipv6_address }}
{%         endif %}
{%         if ldp.discovery.hello_ipv6_holdtime is vyos_defined %}
  discovery hello holdtime {{ ldp.discovery.hello_ipv6_holdtime }}
{%         endif %}
{%         if ldp.discovery.hello_ipv6_interval is vyos_defined %}
  discovery hello interval {{ ldp.discovery.hello_ipv6_interval }}
{%         endif %}
{%         if ldp.discovery.session_ipv6_holdtime is vyos_defined %}
  session holdtime {{ ldp.discovery.session_ipv6_holdtime }}
{%         endif %}
{%         if ldp.import.ipv6.import_filter.filter_access_list6 is vyos_defined %}
  label remote accept for {{ ldp.import.ipv6.import_filter.filter_access_list6 }} {{ 'from ' ~ ldp.import.ipv6.import_filter.neighbor_access_list6 if ldp.import.ipv6.import_filter.neighbor_access_list6 is vyos_defined }}
{%         endif %}
{%         if ldp.export.ipv6.explicit_null is vyos_defined %}
  label local advertise explicit-null
{%         endif %}
{%         if ldp.export.ipv6.export_filter.filter_access_list6 is vyos_defined %}
  label local advertise for {{ ldp.export.ipv6.export_filter.filter_access_list6 }} {{ 'to ' ~ ldp.export.ipv6.export_filter.neighbor_access_list6 if ldp.export.ipv6.export_filter.neighbor_access_list6 is vyos_defined }}
{%         endif %}
{%         if ldp.targeted_neighbor is vyos_defined %}
{%             if ldp.targeted_neighbor.ipv6.enable is vyos_defined %}
  discovery targeted-hello accept
{%             endif %}
{%             if ldp.targeted_neighbor.ipv6.hello_holdtime is vyos_defined %}
  discovery targeted-hello holdtime {{ ldp.targeted_neighbor.ipv6.hello_holdtime }}
{%             endif %}
{%             if ldp.targeted_neighbor.ipv6.hello_interval is vyos_defined %}
  discovery targeted-hello interval {{ ldp.targeted_neighbor.ipv6.hello_interval }}
{%             endif %}
{%             for addresses in ldp.targeted_neighbor.ipv6.address %}
  neighbor {{ addresses }} targeted
{%             endfor %}
{%         endif %}
{%         if ldp.interface is vyos_defined %}
{%             for interface in ldp.interface %}
  interface {{ interface }}
{%             endfor %}
{%         endif %}
 exit-address-family
{%     else %}
 no address-family ipv6
{%     endif %}
 !
exit
{% endif %}
!
